Skip to content

feat: port + refactor ExecutorchModule to C++#345

Merged
chmjkb merged 43 commits intomainfrom
@chmjkb/executorch-module-cpp
Jun 12, 2025
Merged

feat: port + refactor ExecutorchModule to C++#345
chmjkb merged 43 commits intomainfrom
@chmjkb/executorch-module-cpp

Conversation

@chmjkb
Copy link
Copy Markdown
Collaborator

@chmjkb chmjkb commented May 28, 2025

Description

This PR aims to replace the existing ExecuTorch bindings for ones that leverage JSI and resemble the underlying runtime more accurately. Currently WIP.

Type of change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation update (improves or adds clarity to existing documentation)

Tested on

  • iOS
  • Android

Testing instructions

Screenshots

Related issues

#209
#338

  • I have performed a self-review of my code
  • I have commented my code, particularly in hard-to-understand areas
  • I have updated the documentation accordingly
  • My changes generate no new warnings

Additional notes

@chmjkb chmjkb changed the base branch from main to @jakubgonera/cpp May 28, 2025 09:13
@chmjkb chmjkb marked this pull request as draft May 28, 2025 09:15
@chmjkb chmjkb force-pushed the @chmjkb/executorch-module-cpp branch from a1e060c to 51549bb Compare June 5, 2025 13:35
@chmjkb chmjkb changed the base branch from @jakubgonera/cpp to main June 5, 2025 13:35
@chmjkb chmjkb force-pushed the @chmjkb/executorch-module-cpp branch from 912dfa9 to 9f3d631 Compare June 6, 2025 11:24
@chmjkb chmjkb marked this pull request as ready for review June 6, 2025 11:58
@chmjkb chmjkb requested a review from JakubGonera June 6, 2025 11:59
Comment thread packages/react-native-executorch/common/rnexecutorch/utils/TypeConstraints.h Outdated
Comment thread packages/react-native-executorch/common/rnexecutorch/bindings/ExecutorchModule.h Outdated
Comment thread packages/react-native-executorch/common/rnexecutorch/bindings/ExecutorchModule.h Outdated
Comment thread packages/react-native-executorch/common/rnexecutorch/models/BaseModel.h Outdated
Comment thread packages/react-native-executorch/src/index.tsx
Comment thread packages/react-native-executorch/src/modules/general/NewExecutorchModule.ts Outdated
@chmjkb chmjkb mentioned this pull request Jun 9, 2025
10 tasks
@chmjkb chmjkb force-pushed the @chmjkb/executorch-module-cpp branch from 4eaa14c to 3b9c932 Compare June 9, 2025 06:42
@msluszniak msluszniak linked an issue Jun 10, 2025 that may be closed by this pull request
@msluszniak msluszniak linked an issue Jun 10, 2025 that may be closed by this pull request
Comment thread packages/react-native-executorch/common/rnexecutorch/host_objects/JSTensorView.h Outdated
Comment on lines +8 to +25
async load(
modelSource: ResourceSource,
onDownloadProgressCallback: (_: number) => void = () => {}
): Promise<void> {
const paths = await ResourceFetcher.fetchMultipleResources(
onDownloadProgressCallback,
modelSource
);
this.nativeModule = global.loadExecutorchModule(paths[0] || '');
}

protected async forwardET(inputTensor: TensorPtr[]): Promise<TensorPtr[]> {
return await this.nativeModule.forward(inputTensor);
}

async getInputShape(methodName: string, index: number): Promise<number[]> {
return this.nativeModule.getInputShape(methodName, index);
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two thoughts on this setup:

  1. The load method contains logic that would only be used if used with ExecutorchModule (correct me if I'm wrong), so we don't gain anything on having this code here compared to in ExecutorchModule.
  2. Adding forwardET to the base class requires each module inheriting to be a single model, so it excludes things like OCR which will not have a single forwardET method we could invoke. Maybe we should inherit from ExecutorchModule where possible (e.g. StyleTransfer), and have this be a true base class for all modules?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. That's correct, this setup was done strictly for testing purposes and I forgot to change it
  2. Yeah, that makes sense but I'm not sure if this can be done now. Currently the native API accepts one source arg on load. So either we refactor the native API and then make the changes you mentioned, or we can do something like this:
class EncoderDecoderModel { // doesn't inherit from base, kind of like a controller 
  constructor(encoderSource, decoderSource) {
    // they do inherit from base
    this.encoder = new SomeEncoder(encoderSource) 
    this.decoder = new SomeDecoder(decoderSource)
  }
}

Comment thread packages/react-native-executorch/common/rnexecutorch/models/BaseModel.cpp Outdated
@chmjkb chmjkb force-pushed the @chmjkb/executorch-module-cpp branch from 97ed56d to bc75e3a Compare June 11, 2025 09:03
@chmjkb chmjkb requested a review from JakubGonera June 11, 2025 09:04
@chmjkb chmjkb merged commit dc34ec1 into main Jun 12, 2025
2 checks passed
@chmjkb chmjkb deleted the @chmjkb/executorch-module-cpp branch June 12, 2025 07:51
mkopcins pushed a commit that referenced this pull request Oct 15, 2025
## Description

This PR aims to replace the existing ExecuTorch bindings for ones that
leverage JSI and resemble the underlying runtime more accurately.
Currently WIP.

### Type of change

- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to not work as expected)
- [ ] Documentation update (improves or adds clarity to existing
documentation)

### Tested on

- [ ] iOS
- [ ] Android

### Testing instructions

<!-- Provide step-by-step instructions on how to test your changes.
Include setup details if necessary. -->

### Screenshots

<!-- Add screenshots here, if applicable -->

### Related issues

<!-- Link related issues here using #issue-number -->

#209 
#338 

- [ ] I have performed a self-review of my code
- [ ] I have commented my code, particularly in hard-to-understand areas
- [ ] I have updated the documentation accordingly
- [ ] My changes generate no new warnings

### Additional notes

<!-- Include any additional information, assumptions, or context that
reviewers might need to understand this PR. -->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Port ExecutorchModule to C++ Refactor ExecuTorch bindings

4 participants